iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
自我挑戰組

每天早起刷一題系列 第 4

[1/30][Easy] Valid Anagram

  • 分享至 

  • xImage
  •  

起床時間:0530
今天抽到這題,我的第一步思路就對了:)

題目:不貼原文了,貼翻譯版的,更貼近心得筆記

給你兩個字串 s 和 t,判斷它們是否是 anagram(字母重組詞)。
定義:如果兩個字串包含的字母完全相同,且每個字母出現的次數也相同,只是排列順序可以不一樣,那它們就是 anagram。
要求:回傳 True 或 False。
例子:
s = "anagram", t = "nagaram" → True
s = "rat", t = "car" → False

直覺思路

字數不同直接false
把s丟到一個HashTable,紀錄每個字母出現幾次
把t也丟一個HashTable,紀錄每個字母出現幾次
遍歷1~26英文字母,比對出現次數

盲點

  • 其實只需要一個HashTable就好了,不需要三個迴圈。雖然時間複雜度都是O(N)
  • Hash Table / Hash Map 區別

Step3 帶任務讀解法

  1. Invariant/狀態
    在 Counter 解法中,count[i] 代表字母 i 在 s 與 t 出現次數的淨差。
    **Invariant:**遍歷到任意位置時,count 真實反映了「目前為止兩字串的頻率差」。最後全為 0 才是 anagram。

  2. 為何降到 O(n)
    因為我們只做兩趟線性掃描:
    s:+1
    t:-1
    檢查陣列是否全零也是 O(26) = O(1)。
    所以總複雜度 O(n),比排序 O(n log n) 更快。

  3. 邊界/易錯

  • 長度不同 → 立即 False,否則會誤算。
  • 字符集假設:若只小寫 a–z,可以用固定長度 26 陣列;若包含 Unicode,要改用 hash map。
  • 空字串:兩個都空 → True;一個空一個不空 → False。
  • 大小寫敏感:視題目規定,通常 'A' ≠ 'a'。

語法

Hash Table(雜湊表)

是一種資料結構(data structure),用來存放 key–value 配對。它透過 hash function 將 key 映射到某個 index,從而快速找到對應的 value。
👉 可以把它想像成一本書的「索引表」,查關鍵字(key)就能直接跳到對應的頁碼(value)。

Hash Map(雜湊映射)

是 Hash Table 的一種實作(implementation),通常以 class 或物件的形式提供。例如:
在 Java 裡有 HashMap 類別。
在 Python 裡,dict 就是 hash map 的實作。


上一篇
[3/30][Medium] Merge Intervals (嘗試刷題端正姿勢)
下一篇
[5/30][Hard] Merge K Sorted Linked Lists
系列文
每天早起刷一題7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言